iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
自我挑戰組

Kotlin Everyday:新手寫程式踩的坑系列 第 5

Day 5 ─用Kotlin做點餐介面 (3) 顯示訊息Toast

  • 分享至 

  • xImage
  •  

顯示訊息是一個簡單、很實用的小功能,有時候我們需要引導使用者做一些事情,這時候就可以用Toast元件來提醒使用者。
例如,在昨天寫的code裡,我們想要多加一個功能:必須要使用者輸入姓名,才會實現切換,於是就在監聽事件裡面多加if - else條件,判斷如果ed_name字串是空白時,做Toast功能提醒使用者要輸入,反之則實現頁面切換

// btn_choice.setOnClickListener {
    if (ed_name.text.toString().isBlank())
        Toast.makeText(this@MainActivity, "請輸入訂購人姓名", Toast.LENGTH_SHORT ).show()
    else {
        // val intent = Intent(this, Main2Activity::class.java)
        ...
        ...
    }
}

如何做一個Toast訊息
Toast 是一個小型提示訊息的視窗,會顯示在視窗下方的一個小小訊息,多半是用來提醒使用者。基本型態:

val context = applicationContext    //表示context
val text = "Hello toast!"           //訊息內容
val duration = Toast.LENGTH_SHORT   //表示顯示時長 
val toast = Toast.makeText(context, text, duration)  
toast.show()  

如果不想寫上面這麼多行,可以直接串(chain)起來,變成

Toast.makeText(context, "text", duration).show()
  • context:在activity下寫this指向它本身(當前Activity)
  • text:放顯示的訊息
  • duration:通常有Toast.LENGTH_SHORTToast.LENGTH_LONG兩種
  • 一定不要忘記加.show() 才會顯示

客製化Toast訊息
有時候我們不想用模板化的文字訊息、或不想只是顯示在頁面下方,需要改變樣式和位置擺設,這時候可以來客製化Toast。

  1. 在res/layout開一個XML檔案,用以放置要顯示的訊息元件,拉一個簡單的圖示+文字

  2. 利用「layoutInflater.inflate」放入自定義畫面

  • 獲取LayoutInflater的實例,可以调用它的inflate()方法来加載布局
  • inflate()方法一般接收兩個參數,第一個參數就是要載入xml的id,第二個參數是指給該xml的外部再嵌一父層,如果不需要就直接傳null

inflate(int resource, ViewGroup root)
Inflate a new view hierarchy from the specified xml resource.

val toast = Toast(this)
    toast.view = layoutInflater.inflate(R.layout.custom_toast, null)
    toast.duration = Toast.LENGTH_SHORT
    toast.setGravity(Gravity.CENTER, 0, 0)   //可設定位置
  1. 如何設定位置 .setGravity
    我們需要把客製化訊息做成ViewGroup,這裡用的是LinearLayout,記得Layout長寬一定要設定成wrap_content,不然怎麼setGravity的位置還是會取到整個畫面!
    我們設定CENTER .setGravity(Gravity.CENTER, 0, 0)
  2. 最後.show( )執行畫面,就可以看到Toast訊息會跳在正中間囉~


上一篇
Day 4 ─用Kotlin做點餐介面 (2) intent、RadioButton
下一篇
Day 6 ─用Kotlin做點餐介面 (4) AlertDialog
系列文
Kotlin Everyday:新手寫程式踩的坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
jacky324340
iT邦新手 5 級 ‧ 2020-08-10 11:26:22

android 11似乎無法使用custom Toast,view已經被移除了

我要留言

立即登入留言